package d2_reflect;

import java.io.FileOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;

//实现一个简易版的框架
public class ObjectFrame {


    //1、用于保存对象到文件中去
    public static void save(Object obj) throws Exception {
        //2、准备一个输出管道-->就用打印流把,一行一行打印
        //把异常直接抛出去
        PrintStream printStream = new PrintStream(new
                FileOutputStream(
                "javapromax\\day14-junit-reflect-annontion-proxy-app\\src\\data.txt", true));

        //3、保存对象的字段和对应值
        // obj 学生 star
        //1、拿到对象的字段, 只有反射技术可以解决
        //2、反射可以先拿到这个对象的Class文
        Class c = obj.getClass();
        //只是类名
        printStream.println("-------------" + c.getSimpleName() + "--------------------");
        //全类名
        printStream.println("-------------" + c.getName() + "--------------------");
        //3、提取这个对象的全部字段
        Field[] fields = c.getDeclaredFields();

        //4、遍历字段
        for (Field field : fields) {
            field.setAccessible(true);
            String name = field.getName();
            //字段值-->是属于对象的,所以要根据对象拿
            String value = field.get(obj) + "";

            printStream.println(name + "==>" + value);
        }
        //最后关闭流
        printStream.close();

    }
}
